﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO_MechSys;
using BLL_MechSys;

namespace FORMS_MechSys
{
    public partial class frmProdutoAdicionar : Form
    {
        #region Variaveis
        int OrdemPendenteID;

        DataTable dataTableGridView = new DataTable();
        List<DTOProduto> ListProdutos = new List<DTOProduto>();

        bool Edicao = false;
        int QuantidadeED = 0;
        DTOOrdemDetalheProduto dtoOrdemDetalheProdutoEd = new DTOOrdemDetalheProduto();

        DTOProduto dtoProdutoADD = new DTOProduto();
        BLLProduto bllProduto = new BLLProduto();
        BLLOrdemDetalheProduto bllOrdemDetalheProduto = new BLLOrdemDetalheProduto();
        BLLFornecedor bllFornecedor = new BLLFornecedor();
        BLLCategoria bllCategoria = new BLLCategoria();
        DTOCor dtoCorPrincipal = new DTOCor();
        DTOCor dtoCorLetra = new DTOCor();
        DTOCor dtoCorFundo = new DTOCor();
        DTOCor dtoCorDataGrid = new DTOCor();
        BLLCor bllCor = new BLLCor();


        
        
        #endregion

        public frmProdutoAdicionar(int ordemPendenteID)
        {
            InitializeComponent();
            PopulaGrid();
            SetColors();
            OrdemPendenteID = ordemPendenteID;
        }

        public frmProdutoAdicionar(DTOOrdemDetalheProduto dtoOrdemDetalheProduto)
        {
            InitializeComponent();
            PopulaGrid();
            SetColors();
            OrdemPendenteID = dtoOrdemDetalheProduto.OrdemPendenteID;
            Edicao = true;
            btnAdicionar.Text = "Salvar";

            txtCodigo.Text = dtoOrdemDetalheProduto.ProdutoID.ToString();
            List<DTOProduto> ListDtoProduto = bllProduto.PesquisarProdutos("", dtoOrdemDetalheProduto.ProdutoID);
            DTOProduto dtoProduto = new DTOProduto();
            if (ListDtoProduto.Count > 0)
                dtoProduto = ListDtoProduto[0];
            txtDescricao.Text = dtoProduto.Descricao;
            txtValorUnitario.Text = string.Format("{0:0.00}", dtoOrdemDetalheProduto.PrecoUnitario);
            txtQuantidade.Text = dtoOrdemDetalheProduto.Quantidade.ToString();
            dtoOrdemDetalheProdutoEd = dtoOrdemDetalheProduto;
            txtDesconto.Text = dtoOrdemDetalheProduto.Desconto.ToString();
            QuantidadeED = dtoOrdemDetalheProduto.Quantidade;

        }

        public void PopulaGrid()
        {
            DataRow dataRow;
            dataTableGridView = new DataTable();
            List<DTOProduto> ListProdutoTemp;

            ListProdutoTemp = bllProduto.BuscarProdutosCadastradosLinha();

            if (ListProdutos != ListProdutoTemp)
            {
                ListProdutos = ListProdutoTemp;
                if (ListProdutos.Count > 0)
                {
                    dataTableGridView.Columns.Add("ProdutoID", typeof(int));
                    dataTableGridView.Columns.Add("Descrição", typeof(string));
                    dataTableGridView.Columns.Add("Valor", typeof(double));
                    dataTableGridView.Columns.Add("Quantidade", typeof(int));

                    foreach (DTOProduto dtoProduto in ListProdutos)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["ProdutoID"] = dtoProduto.ProdutoID;
                        dataRow["Descrição"] = dtoProduto.Descricao;
                        dataRow["Valor"] = dtoProduto.Valor;
                        dataRow["Quantidade"] = dtoProduto.Quantidade;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);
                    }
                }
                dtGrid.DataSource = null;
                dtGrid.DataSource = dataTableGridView;
            }
        }

        public void PopulaGrid(string descricao, int codigo)
        {
            DataRow dataRow;
            dataTableGridView = new DataTable();
            List<DTOProduto> ListProdutoTemp;
            ListProdutoTemp = bllProduto.PesquisarProdutosLinha(descricao, codigo);

            if (ListProdutos != ListProdutoTemp)
            {
                ListProdutos = ListProdutoTemp;
                if (ListProdutos.Count > 0)
                {
                    dataTableGridView.Columns.Add("ProdutoID", typeof(int));
                    dataTableGridView.Columns.Add("Descrição", typeof(string));
                    dataTableGridView.Columns.Add("Valor", typeof(double));
                    dataTableGridView.Columns.Add("Quantidade", typeof(int));

                    foreach (DTOProduto dtoProduto in ListProdutos)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["ProdutoID"] = dtoProduto.ProdutoID;
                        dataRow["Descrição"] = dtoProduto.Descricao;
                        dataRow["Valor"] = dtoProduto.Valor;
                        dataRow["Quantidade"] = dtoProduto.Quantidade;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);
                    }
                }

                dtGrid.DataSource = null;
                dtGrid.DataSource = dataTableGridView;
            }
        }

        private void SetColors()
        {
            //
            //
            dtoCorPrincipal = bllCor.Buscar("Principal");
            btn_pesquisar.BackColor = btnAdicionar.BackColor = lblTitulo.BackColor = tlpBarraTop.BackColor =
                toolStrip1.BackColor = toolStripLogo.BackColor = dtoCorPrincipal.Cor;
            //

            //
            //
            dtoCorFundo = bllCor.Buscar("Fundo");
            tlpPrincipal.BackColor = dtoCorFundo.Cor;
            //

            //
            //
            dtoCorDataGrid = bllCor.Buscar("DataGrid");
            dtGrid.BackgroundColor = dtoCorDataGrid.Cor;
            //


            //
            //
            dtoCorLetra = bllCor.Buscar("Letra");
            btnAdicionar.ForeColor = btn_pesquisar.ForeColor = label1.ForeColor = label2.ForeColor =
                label3.ForeColor = label4.ForeColor =
                label5.ForeColor = label8.ForeColor = lblTitulo.ForeColor =
            dtoCorLetra.Cor;

            //
        }

        private void Limpar()
        {
            txtCodigo.Clear();
            txtDesconto.Clear();
            txtDescricao.Clear();
            txtPesquisar.Clear();
            txtQuantidade.Clear();
            txtValorUnitario.Clear();
            txtPesquisar.Focus();

        }

        private void btn_pesquisar_Click(object sender, EventArgs e)
        {
            int cod = new int();

            Int32.TryParse(txtPesquisar.Text, out cod);
            PopulaGrid("%" + txtPesquisar.Text + "%", cod);
        }

        private void toolStripButtonSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnAdicionar_Click(object sender, EventArgs e)
        {
            DTOProduto dtoproduto = new DTOProduto();
            dtoproduto.Quantidade = QuantidadeED;
            dtoproduto.ProdutoID = dtoOrdemDetalheProdutoEd.ProdutoID;
            bllProduto.AlterarQuantidade(dtoproduto);

            DTOOrdemDetalheProduto dtoOrdemDetalheProduto = new DTOOrdemDetalheProduto();
            if (!string.IsNullOrWhiteSpace(txtCodigo.Text) &&
                !string.IsNullOrWhiteSpace(txtDesconto.Text) &&
                !string.IsNullOrWhiteSpace(txtValorUnitario.Text) &&
                !string.IsNullOrWhiteSpace(txtQuantidade.Text))
            {
                dtoOrdemDetalheProduto.Desconto = double.Parse(txtDesconto.Text);
                dtoOrdemDetalheProduto.PrecoUnitario = double.Parse(txtValorUnitario.Text);
                dtoOrdemDetalheProduto.Quantidade = int.Parse(txtQuantidade.Text);
                dtoOrdemDetalheProduto.ProdutoID = int.Parse(txtCodigo.Text);
                dtoOrdemDetalheProduto.OrdemPendenteID = OrdemPendenteID;

                dtoproduto = new BLLProduto().PesquisarProdutosLinha("", dtoOrdemDetalheProduto.ProdutoID)[0];
                if (dtoproduto.Quantidade < dtoOrdemDetalheProduto.Quantidade)
                {
                    new frmMessageBox().Show("Quantidade Insuficiente no Estoque");
                    txtQuantidade.Text = dtoproduto.Quantidade.ToString();
                    txtQuantidade.Focus();
                }
                else
                {
                    dtoproduto.ProdutoID = dtoOrdemDetalheProduto.ProdutoID;
                    dtoproduto.Quantidade = 0 - dtoOrdemDetalheProduto.Quantidade;
                    bllProduto.AlterarQuantidade(dtoproduto);

                    if (!Edicao)
                        bllOrdemDetalheProduto.Inserir(dtoOrdemDetalheProduto);
                    else
                    {
                        dtoOrdemDetalheProdutoEd.Desconto = double.Parse(txtDesconto.Text);
                        dtoOrdemDetalheProdutoEd.PrecoUnitario = double.Parse(txtValorUnitario.Text);
                        dtoOrdemDetalheProdutoEd.Quantidade = int.Parse(txtQuantidade.Text);
                        dtoOrdemDetalheProdutoEd.ProdutoID = int.Parse(txtCodigo.Text);
                        dtoOrdemDetalheProdutoEd.OrdemPendenteID = OrdemPendenteID;
                        bllOrdemDetalheProduto.Atualizar(dtoOrdemDetalheProdutoEd);

                        this.Close();
                    }

                    Limpar();
                    PopulaGrid();
                }
            }
            else
            {
                new frmMessageBox().Show("Existem campos obrigatórios em Branco.");
            }

        }

        private void txtPesquisar_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                btn_pesquisar_Click(null, null);
        }

        private void dtGrid_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            txtCodigo.Text = dtGrid["ProdutoID", dtGrid.CurrentCellAddress.Y].Value.ToString();
            txtDescricao.Text = dtGrid["Descrição", dtGrid.CurrentCellAddress.Y].Value.ToString();
            txtValorUnitario.Text = dtGrid["Valor", dtGrid.CurrentCellAddress.Y].Value.ToString();

            int quant = 0;
            Int32.TryParse(txtQuantidade.Text, out quant);
            if (quant > Int32.Parse(dtGrid["ProdutoID", dtGrid.CurrentCellAddress.Y].Value.ToString()))
                txtQuantidade.Text = dtGrid["ProdutoID", dtGrid.CurrentCellAddress.Y].Value.ToString();
            else
                txtQuantidade.Text = quant.ToString();
            txtDesconto.Text = "0";
            txtQuantidade.Focus();
        }
    }
}
